package com.xinqi.modules.discuss.discuss.service;

import com.xinqi.common.base.response.PageInfo;
import com.xinqi.common.base.response.Param;
import com.xinqi.common.mybatis.data.service.BaseService;
import com.xinqi.modules.discuss.discuss.domain.CourseDiscussEntity;
import com.xinqi.modules.discuss.discuss.domain.CourseDiscussStudentLogEntity;
import com.xinqi.modules.discuss.discuss.dto.req.CourseDiscussStudentLogQueryDTO;
import com.xinqi.modules.discuss.discuss.dto.rsp.CourseDiscussResultDTO;
import com.xinqi.modules.discuss.discuss.dto.rsp.CourseDiscussStudentLogResultDTO;

import java.util.List;

/**
 * 服务层
 *
 * @author: yyzhen
 * @date: 2023/03/13
 */
public interface CourseDiscussStudentLogService extends BaseService<CourseDiscussStudentLogEntity> {

    /**
     * 查看学生参与情况列表
     *
     * @param pageable
     * @param query
     * @return
     */
    PageInfo<CourseDiscussStudentLogResultDTO> selectPage(Param pageable, CourseDiscussStudentLogQueryDTO query);


    /**
     * 根据讨论删除
     *
     * @param contentId
     * @return
     */
    void deleteByContentId(Long contentId);

    void deleteByContentIds(List<Long> contentIds);

    /**
     * 通过讨论ID和学生ID获取详细
     *
     * @param contentId
     * @param studentId
     * @return
     */
    CourseDiscussStudentLogEntity selectByContentIdAndStudentId(Long contentId, Long studentId);

    /**
     * 根据讨论ID集合和学生ID获取列表
     *
     * @param contentIds
     * @param studentId
     * @return
     */
    List<CourseDiscussStudentLogEntity> selectByContentIdAndStudentId(List<Long> contentIds, Long studentId);

    /**
     * 通过讨论ID获取列表
     *
     * @param contentId
     * @return
     */
    List<CourseDiscussStudentLogEntity> selectByContentId(Long contentId);

    /**
     * 同步学生设置（学生日志记录不影响主业务，但存在数据量大的情况，故采用异步处理）
     *
     * @param entity
     */
    void synchroStudent(CourseDiscussEntity entity);

    /**
     * 同步学生设置（学生日志记录不影响主业务，但存在数据量大的情况，故采用异步处理）
     *
     * @param discussList
     */
    void synchroStudent(List<CourseDiscussEntity> discussList);

    /**
     * 新增学生同步（学生日志记录不影响主业务，但存在数据量大的情况，故采用异步处理）
     *
     * @param discussList
     * @param classId
     * @param userId
     */
    void synchroStudent(List<CourseDiscussEntity> discussList, Long classId, Long userId);


    /**
     * 已读
     *
     * @param result
     * @param userId
     */
    void synchroRead(CourseDiscussResultDTO result, Long userId);

}
